package bdsimple.impl.mysql;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.CiudadDAO;
import bdsimple.dao.base.CiudadVampiroDAO;
import bdsimple.dao.base.FamiliaDAO;
import bdsimple.dao.base.ItemVampiroDAO;
import bdsimple.dao.base.PropiedadVampiroDAO;
import bdsimple.dao.base.TarjetaMemoriaVampiroDAO;
import bdsimple.dao.base.VampiroDAO;
import bdsimple.dto.base.CiudadDTO;
import bdsimple.dto.base.CiudadVampiroDTO;
import bdsimple.dto.base.FamiliaDTO;
import bdsimple.dto.base.ItemVampiroDTO;
import bdsimple.dto.base.PropiedadVampiroDTO;
import bdsimple.dto.base.TarjetaMemoriaVampiroDTO;
import bdsimple.dto.base.VampiroDTO;
import dao.base.impl.BaseDTO;
import dao.base.impl.Reference;

public class VampiroDTOImpl extends BaseDTO implements VampiroDTO {

	public VampiroDTOImpl() {
		super(VampiroDAO.class);
	}

	// ---------------------------------------------------------------------------

	private String nombre;

	private String apellido;

	private String correo;

	private Date fechaNacimiento;

	private String clave;

	private String alias;

	// private Image imagen;

	private int fuerza;

	private int defensa;

	private int sigilosidad;

	private int velocidad;

	private int habArma;

	private int habNegocios;

	private int ptosEntrenamiento;

	private int ptosExperiencia;

	private int salud;

	private int sangre;

	private int dinero;

	private int numSirvientes;

	private int seguridad;

	private boolean activo;

	private List<PropiedadVampiroDTO> propiedadVampiroDTOList;

	private List<TarjetaMemoriaVampiroDTO> tarjetaMemoriaVampiroDTOList;

	private final Reference<FamiliaDTO> familiaDTORef = //
	new Reference<FamiliaDTO>();

	private List<ItemVampiroDTO> itemVampiroDTOList;

	private final Reference<CiudadDTO> ciudadDTORef = //
	new Reference<CiudadDTO>();

	private List<CiudadVampiroDTO> ciudadVampiroDTOList;

	// ---------------------------------------------------------------------------

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	// ---------------------------------------------------------------------------

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	// ---------------------------------------------------------------------------

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	// ---------------------------------------------------------------------------

	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}

	// ---------------------------------------------------------------------------

	public String getClave() {
		return clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	// ---------------------------------------------------------------------------

	public String getAlias() {
		return alias;
	}

	public void setAlias(String alias) {
		this.alias = alias;
	}

	// ---------------------------------------------------------------------------

	public int getFuerza() {
		return fuerza;
	}

	public void setFuerza(int fuerza) {
		this.fuerza = fuerza;
	}

	// ---------------------------------------------------------------------------

	public int getDefensa() {
		return defensa;
	}

	public void setDefensa(int defensa) {
		this.defensa = defensa;
	}

	// ---------------------------------------------------------------------------

	public int getSigilosidad() {
		return sigilosidad;
	}

	public void setSigilosidad(int sigilosidad) {
		this.sigilosidad = sigilosidad;
	}

	// ---------------------------------------------------------------------------

	public int getVelocidad() {
		return velocidad;
	}

	public void setVelocidad(int velocidad) {
		this.velocidad = velocidad;
	}

	// ---------------------------------------------------------------------------

	public int getHabArma() {
		return habArma;
	}

	public void setHabArma(int habArma) {
		this.habArma = habArma;
	}

	// ---------------------------------------------------------------------------

	public int getHabNegocios() {
		return habNegocios;
	}

	public void setHabNegocios(int habNegocios) {
		this.habNegocios = habNegocios;
	}

	// ---------------------------------------------------------------------------

	public int getPtosEntrenamiento() {
		return ptosEntrenamiento;
	}

	public void setPtosEntrenamiento(int ptosEntrenamiento) {
		this.ptosEntrenamiento = ptosEntrenamiento;
	}

	// ---------------------------------------------------------------------------

	public int getPtosExperiencia() {
		return ptosExperiencia;
	}

	public void setPtosExperiencia(int ptosExperiencia) {
		this.ptosExperiencia = ptosExperiencia;
	}

	// ---------------------------------------------------------------------------

	public int getSalud() {
		return salud;
	}

	public void setSalud(int salud) {
		this.salud = salud;
	}

	// ---------------------------------------------------------------------------

	public int getSangre() {
		return sangre;
	}

	public void setSangre(int sangre) {
		this.sangre = sangre;
	}

	// ---------------------------------------------------------------------------

	public int getDinero() {
		return dinero;
	}

	public void setDinero(int dinero) {
		this.dinero = dinero;
	}

	// ---------------------------------------------------------------------------

	public int getNumSirvientes() {
		return numSirvientes;
	}

	public void setNumSirvientes(int numSirvientes) {
		this.numSirvientes = numSirvientes;
	}

	// ---------------------------------------------------------------------------

	public int getSeguridad() {
		return seguridad;
	}

	public void setSeguridad(int seguridad) {
		this.seguridad = seguridad;
	}

	// ---------------------------------------------------------------------------

	public boolean getActivo() {
		return activo;
	}

	public void setActivo(boolean activo) {
		this.activo = activo;
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<PropiedadVampiroDTO> getPropiedadVampiroDTOList() {
		if (propiedadVampiroDTOList == null) {
			try {

				// Lazy load the list
				PropiedadVampiroDAO propiedadDAO = (PropiedadVampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(PropiedadVampiroDAO.class, connectionBean);

				propiedadVampiroDTOList = new ArrayList<PropiedadVampiroDTO>();
				propiedadVampiroDTOList
						.addAll((Collection<? extends PropiedadVampiroDTO>) // 
						propiedadDAO.listBy(PropiedadVampiroDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return propiedadVampiroDTOList;
	}

	public void setPropiedadVampiroDTOList(
			List<PropiedadVampiroDTO> propiedadVampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<TarjetaMemoriaVampiroDTO> getTarjetaMemoriaVampiroDTOList() {
		if (propiedadVampiroDTOList == null) {
			try {

				// Lazy load the list
				TarjetaMemoriaVampiroDAO tarjetaMemoriaVampiroDAO = (TarjetaMemoriaVampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(TarjetaMemoriaVampiroDAO.class, connectionBean);

				tarjetaMemoriaVampiroDTOList = new ArrayList<TarjetaMemoriaVampiroDTO>();
				tarjetaMemoriaVampiroDTOList
						.addAll((Collection<? extends TarjetaMemoriaVampiroDTO>) // 
						tarjetaMemoriaVampiroDAO.listBy(
								TarjetaMemoriaVampiroDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return tarjetaMemoriaVampiroDTOList;
	}

	public void setTarjetaMemoriaVampiroDTOList(
			List<TarjetaMemoriaVampiroDTO> tarjetaMemoriaVampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	public FamiliaDTO getFamiliaDTO() {
		if (familiaDTORef.getRefValue() == null) {
			if (familiaDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					FamiliaDAO familiaDAO = (FamiliaDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(FamiliaDAO.class, connectionBean);

					familiaDTORef.setRefValue( //
							(FamiliaDTO) familiaDAO.loadById(familiaDTORef
									.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return familiaDTORef.getRefValue();
	}

	public void setFamiliaDTORef(FamiliaDTO familiaDTORef) {
		this.familiaDTORef.setRefValue(familiaDTORef);
	}

	public Reference<FamiliaDTO> getFamiliaRef() {
		return familiaDTORef;
	}

	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<ItemVampiroDTO> getItemVampiroDTOList() {
		if (itemVampiroDTOList == null) {
			try {

				// Lazy load the list
				ItemVampiroDAO itemVampiroDAO = (ItemVampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(ItemVampiroDAO.class, connectionBean);

				itemVampiroDTOList = new ArrayList<ItemVampiroDTO>();
				itemVampiroDTOList
						.addAll((Collection<? extends ItemVampiroDTO>) // 
						itemVampiroDAO.listBy(ItemVampiroDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return itemVampiroDTOList;
	}

	public void setItemVampiroDTOList(List<ItemVampiroDTO> itemVampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------

	public CiudadDTO getCiudadDTO() {
		if (ciudadDTORef.getRefValue() == null) {
			if (ciudadDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					CiudadDAO ciudadDAO = (CiudadDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(CiudadDAO.class, connectionBean);

					ciudadDTORef.setRefValue( //
							(CiudadDTO) ciudadDAO.loadById(ciudadDTORef
									.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return ciudadDTORef.getRefValue();
	}

	public void setCiudadDTORef(CiudadDTO ciudadDTORef) {
		this.ciudadDTORef.setRefValue(ciudadDTORef);
	}

	public Reference<CiudadDTO> getCiudadDTORef() {
		return ciudadDTORef;
	}

	// //
	// ---------------------------------------------------------------------------

	@SuppressWarnings("unchecked")
	public List<CiudadVampiroDTO> getCiudadVampiroDTOList() {
		if (ciudadVampiroDTOList == null) {
			try {

				// Lazy load the list
				CiudadVampiroDAO ciudadDAO = (CiudadVampiroDAO) AbstractFactoryDAO
						.getFactoryDAO(). //
						getDAO(CiudadVampiroDAO.class, connectionBean);

				ciudadVampiroDTOList = new ArrayList<CiudadVampiroDTO>();
				ciudadVampiroDTOList
						.addAll((Collection<? extends CiudadVampiroDTO>) // 
						ciudadDAO.listBy(CiudadVampiroDTOImpl.ID, id));

			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return ciudadVampiroDTOList;
	}

	public void setCiudadVampiroDTOList(
			List<CiudadVampiroDTO> ciudadVampiroDTOList) {
		throw new UnsupportedOperationException();
	}

	// ---------------------------------------------------------------------------
}
